package com.example.aggregatedemo.代理_反射;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/*
* 创建一个代理
* */
public class ProxyUtil {
    /*给一个明确的对象，创建一个代理*/

    /**
     *
     * @param bigStar 被代理的对象
     * @return
     */
    public static Star  createProxy(BigStar bigStar){
        Star star=(Star)Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),
                new Class[]{Star.class},
                new InvocationHandler() {
                    @Override
                    /*
                    参数1.代理的对象
                    参数2.要运行的方法
                    参数3.传递的实参
                     */
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {


                        if ("sing".equals(method.getName())){
                            System.out.println("准备话筒");
                        } else if ("dance".equals(method.getName())){
                            System.out.println("准备场地");
                        }

                        Object rel=method.invoke(bigStar,args);

                        return rel;
                    }
                });
        return star;
    }
}
